var wpsolr_ajax_timer;
function removeQueryParamFromHTML(html_string, param_to_remove) {
if (html_string.search(param_to_remove) >= 0) {
return html_string.replaceAll('?' + param_to_remove, '')
.replaceAll('&' + param_to_remove, '').replaceAll('&' + param_to_remove, '').replaceAll('&' + param_to_remove, '');
}
return html_string;
}
/**
* Change the value of a url parameter, without reloading the page.
*/
function generateUrlParameters(url, current_parameters, is_remove_unused_parameters) {
// jsurl library to manipulate parameters (https://github.com/Mikhus/jsurl)
var url1 = new Url(url);
var force_clear_url = false;
/**
* Add event parameters
*/
let event = jQuery('.wdm_ul').data('wpsolr-events-data');
if (!jQuery.isEmptyObject(event)) {
jQuery.each(['wpsolr_v', 'wpsolr_rq', 'wpsolr_idx', 'wpsolr_evr'], function (key, event_name) {
if (!jQuery.isEmptyObject(event[event_name])) {
url1.query[event_name] = event[event_name];
}
});
}
/**
* Toolset Views removes the indice of each wpsolr_fq[indice]=xxx:yyy in url. Reposition them.
*/
var params_fq_without_index = url1.query['wpsolr_fq[]'];
//console.log('url:' + params_fq_without_index);
if (undefined !== params_fq_without_index) {
for (var i = 0; i < params_fq_without_index.length; i++) {
// Reposition the indice
url1.query[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_FQ + '[' + i + ']'] = params_fq_without_index[i];
}
// Remove now.
delete url1.query[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_FQ + '[]'];
}
//console.log(JSON.stringify(current_parameters));
/**
* Set parameters not from wpsolr
*/
jQuery.each(current_parameters, function (key, value) {
//console.log(key + ' : ' + value);
if (key.substring(0, 'wpsolr_'.length) !== 'wpsolr_') {
url1.query[key] = value;
}
});
/**
* Extract parameter query
*/
var query = current_parameters[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_S];
if (undefined !== query) {
url1.query[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_S] = query || '';
force_clear_url = true;
}
/**
* Extract parameter query
*/
var query = current_parameters[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_Q] || '';
if (query !== '') {
url1.query[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_Q] = query;
} else if (is_remove_unused_parameters) {
delete url1.query[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_Q];
}
/**
* Extract parameter fq (query field)
* We follow Wordpress convention for url parameters with multiple occurence: xxx[0..n]=
* (php is xxx[]=)
*/
// First, remove all fq parameters
for (var index = 0; ; index++) {
if (undefined === url1.query[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_FQ + '[' + index + ']']) {
break;
} else {
delete url1.query[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_FQ + '[' + index + ']'];
}
}
if (!force_clear_url) {
// 2nd, add parameters
var query_fields_with_duplicates = current_parameters[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_FQ] || [];
// Remove potential duplicates
query_fields = query_fields_with_duplicates.filter(function (item, pos, self) {
return self.indexOf(item) == pos;
});
for (var index in query_fields) {
url1.query[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_FQ + '[' + index + ']'] = query_fields[index];
}
}
/**
* Extract parameter sort
*/
var sort = current_parameters[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_SORT] || '';
if ((!force_clear_url) && (sort !== '')) {
url1.query[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_SORT] = sort;
} else if (is_remove_unused_parameters) {
delete url1.query[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_SORT];
}
/**
* Extract parameter page number
*/
var paged = current_parameters[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_PAGE] || '';
if (paged !== '') {
url1.query[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_PAGE] = paged;
} else if (is_remove_unused_parameters) {
delete url1.query[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_PAGE];
}
// Remove old search parameter
delete url1.query[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_SEARCH];
return '?' + url1.query.toString();
}
/**
* History back/forward buttons (history controlled with pushState())
*/
// Update url with the current selection, if required, and authorized by admin option
window.addEventListener("popstate", function (e) {
if (wp_localize_script_autocomplete.data.is_show_url_parameters) {
call_ajax_search_timer(window.location.search, false, true);
}
});
/**
* Push url to history and mark it as a WPSOLR push
* @param url
*/
function wpsolr_push_state(url) {
if (wp_localize_script_autocomplete.data.is_show_url_parameters && (undefined !== history.pushState)) {
var state = {url: url, is_wpsolr: true};
history.pushState(state, '', state.url);
}
}
/**
* Get the facets state (checked)
* @returns {Array}
*/
function get_ui_facets_state(element) {
if (element) {
current_facets = element.closest('.res_facets');
} else {
current_facets = jQuery(document);
}
// Add all selected facets to the state
state = [];
visited = [];
current_facets.find('.select_opt.checked').each(function () {
// Retrieve current selection
let current_selected = jQuery(this);
var facet_id = current_selected.attr('id');
var facet_data = current_selected.data('wpsolr-facet-data');
if ((facet_id !== 'wpsolr_remove_facets') &&
(undefined !== facet_data) &&
(!facet_data.is_permalink) &&
(0 === current_selected.next('ul').find('.select_opt.checked').length)) {
// Do not add the remove facets facet to url parameters
// Do not add the url parameter of a permalink (to prevent /red?wpsolr_fq[0]=color:red)
// Do not add parents of flat hierachies, only leaf elements
var value = '';
switch (facet_data.type) {
case 'facet_type_range':
value = facet_data.id + ':' + facet_data.item_value;
break;
default:
value = facet_data.id + ':' + facet_data.item_value;
break;
}
//console.log(facet_data.is_permalink + ' ' + value);
state.push(value);
}
});
current_facets.find('.select_opt.unchecked').each(function () {
// Retrieve current selection. Remove the selected value.
opts = jQuery(this).data('wpsolr-facet-data').id + ':';
state.push(opts);
//console.log('remove unchecked: ' + jQuery(this).attr('id').split(':')[0]);
});
return state;
}
/**
* Return current stored values
* @returns {{query: *, fq: *, sort: *, start: *}}
*/
function get_ui_selection() {
var result = {};
let css_sort = '.select_field';
if (wp_localize_script_autocomplete.data.css_ajax_container_page_sort) {
css_sort = wp_localize_script_autocomplete.data.css_ajax_container_page_sort
}
result[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_Q] = jQuery('#search_que').val() || '';
result[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_FQ] = get_ui_facets_state();
result[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_SORT] = jQuery(css_sort).val() || '';
result[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_PAGE] = jQuery('#paginate').val() || '';
return result;
}
function wpsolr_ajax_loading(container, action) {
var loader_options = {
//color: "rgba(0, 0, 0, 0.4)",
//image: "img/custom_loading.gif",
//maxSize: "80px",
//minSize: "20px",
//resizeInterval: 0,
//size: "50%"
};
container.LoadingOverlay(action, loader_options);
}
function call_ajax_search_timer(selection_parameters, is_change_url, is_scroll_top_after) {
// Mark the beginning of loading. Removed when facets are refreshed.
jQuery('.res_facets').append('');
// Ajax, show loader
if (wp_localize_script_autocomplete.data.is_ajax) {
var current_overlay = jQuery(wp_localize_script_autocomplete.data.css_ajax_container_overlay).first();
wpsolr_ajax_loading(current_overlay, 'show');
}
if ('' !== wp_localize_script_autocomplete.data.ajax_delay_ms) {
// Delay
if (undefined !== wpsolr_ajax_timer) {
window.clearTimeout(wpsolr_ajax_timer);
}
wpsolr_ajax_timer = window.setTimeout(call_ajax_search, wp_localize_script_autocomplete.data.ajax_delay_ms, selection_parameters, is_change_url, is_scroll_top_after);
} else {
// No delay
call_ajax_search(selection_parameters, is_change_url, is_scroll_top_after);
}
}
function call_ajax_search(selection_parameters, is_change_url, is_scroll_top_after) {
var url_parameters = selection_parameters;
if ((selection_parameters instanceof Object) && (undefined === selection_parameters['url'])) {
// Merge default parameters with active parameters
var parameters = get_ui_selection();
jQuery.extend(parameters, selection_parameters);
// Update url with the current selection
url_parameters = generateUrlParameters(window.location.href, parameters, true);
}
// Remove the pagination from the url, to start from page 1
// xxx/2/ => xxx/
if (!(selection_parameters instanceof Object) || (undefined === selection_parameters['url'])) {
var url_base = window.location.href.split("?")[0];
if (selection_parameters instanceof Object) {
// Any selection should reset the pagination
var url = url_base.replace(/\/page\/\d+/, '');
} else {
var url = url_base;
}
} else {
var url = selection_parameters['url'];
url_parameters = '';
}
// Not an ajax, redirect to url
if (!wp_localize_script_autocomplete.data.is_ajax) {
// Redirect to url
window.location.href = url + url_parameters;
return;
}
// Update url with the current selection, if required, and authorized by admin option
if (is_change_url) {
// Option to show parameters in url no selected: do nothing
wpsolr_push_state(url + url_parameters);
}
var current_overlay = jQuery(wp_localize_script_autocomplete.data.css_ajax_container_overlay).first();
// Pass parameters to Ajax
jQuery.ajax({
url: url + url_parameters,
//type: "post",
data: {wpsolr_is_ajax: 1},
dataType: 'html',
success: function (response) {
var response_results = jQuery(response).find(wp_localize_script_autocomplete.data.css_ajax_container_results).first().html();
if (undefined === response_results) {
// Show the page with the empty message
window.location.href = url + url_parameters;
} else {
// Remove loader
wpsolr_ajax_loading(current_overlay, 'hide');
// Filter HTML response
response = removeQueryParamFromHTML(response, 'wpsolr_is_ajax=1');
var response_events = jQuery(response).find('#wpsolr_events_data').data('wpsolr-events');
var response_page_title = jQuery(response).find(wp_localize_script_autocomplete.data.css_ajax_container_page_title).first().html();
var response_page_sort = jQuery(response).find(wp_localize_script_autocomplete.data.css_ajax_container_page_sort).first().html();
var response_pagination = jQuery(response).find(wp_localize_script_autocomplete.data.css_ajax_container_pagination).first().html();
var response_count = jQuery(response).find(wp_localize_script_autocomplete.data.css_ajax_container_results_count).first().html();
// Refresh metas information like title, description
jQuery(document).find('title').html(jQuery(response).filter('title').html());
jQuery('meta').each(function () {
var attribute = jQuery(this).attr('name') ? 'name' : (jQuery(this).attr('property') ? 'property' : '');
if ('' !== attribute) {
///console.log(attribute + ': ' + 'meta[' + attribute + '="' + jQuery(this).attr(attribute) + '"]');
jQuery(this).attr('content', jQuery(response).filter('meta[' + attribute + '="' + jQuery(this).attr(attribute) + '"]').attr('content'));
}
});
// Display facets
jQuery('.res_facets').html(jQuery(response).find('.res_facets').first().html());
// Display page title
jQuery(wp_localize_script_autocomplete.data.css_ajax_container_page_title).html(response_page_title);
// Display page sort list
jQuery(wp_localize_script_autocomplete.data.css_ajax_container_page_sort).html(response_page_sort);
// Display results
jQuery(wp_localize_script_autocomplete.data.css_ajax_container_results).first().html(undefined === response_results ? '' : response_results);
// Display number of results
jQuery(wp_localize_script_autocomplete.data.css_ajax_container_results_count).html(response_count);
let has_pagination = false;
const current_pagination = jQuery(wp_localize_script_autocomplete.data.css_ajax_container_pagination);
if (undefined !== response_pagination) {
if (current_pagination.length === 0) {
//response_pagination.insertAfter(current_results);
}
current_pagination.html(response_pagination).show();
has_pagination = true;
} else {
current_pagination.hide();
}
if (is_scroll_top_after) {
// Come back to top
jQuery('html,body').animate({scrollTop: 0}, "fast");
}
// Notify that Ajax is completed
//console.log('triger ajax refresh');
jQuery(document).trigger('wpsolr_on_ajax_success', {has_pagination: has_pagination});
}
},
error: function () {
// Remove loader
wpsolr_ajax_loading(current_overlay, 'hide');
// Notify that Ajax has failed
jQuery(document).trigger('wpsolr_on_ajax_error');
},
always: function () {
// Not called.
}
});
}
/**
* JQuery UI events
*/
jQuery(document).ready(function ($) {
var suggestions = wp_localize_script_autocomplete.data.wpsolr_autocomplete_selector;
$.each(suggestions, function (index, suggestion) {
var suggestion_selector = suggestion['jquery_selector'];
$(suggestion_selector).off(); // Deactivate other events of theme
$(suggestion_selector).prop('autocomplete', 'off'); // Prevent browser autocomplete
});
/**
* Search form is focused
*/
if (wp_localize_script_autocomplete.data.wpsolr_autocomplete_is_active) {
var suggestion_is_search_admin = wp_localize_script_autocomplete.data.wpsolr_is_search_admin;
var lang = wp_localize_script_autocomplete.data.lang;
$.each(suggestions, function (index, suggestion) {
var suggestion_selector = suggestion['jquery_selector'];
var suggestion_uuid = suggestion['suggestion_uuid'];
var suggestion_class = suggestion['suggestion_class'];
var suggestion_url_parameters = suggestion['url_parameters'];
var view_uuid = suggestion['view_uuid'];
var jquery_autocomplete_options = suggestion['jquery_autocomplete_options'];
var custom_options = $.isEmptyObject(jquery_autocomplete_options) ? {} : JSON.parse(jquery_autocomplete_options);
$(document).on('focus', suggestion_selector, function (event) {
event.preventDefault();
var wp_ajax_action = wp_localize_script_autocomplete.data.wpsolr_autocomplete_action;
var wp_ajax_nonce = $(wp_localize_script_autocomplete.data.wpsolr_autocomplete_nonce_selector).val();
var me = $(this);
$(this).devbridgeAutocomplete(
$.extend(true, {}, {
minChars: 1,
triggerSelectOnValidInput: false,
serviceUrl: wp_localize_script_autocomplete.data.ajax_url,
type: 'POST',
paramName: 'word',
params: {
action: wp_ajax_action,
suggestion_uuid: suggestion_uuid,
security: wp_ajax_nonce,
url_parameters: suggestion_url_parameters,
is_search_admin: suggestion_is_search_admin,
lang: lang,
view_uuid: view_uuid
},
preserveInput: true,
onHide: function (element, container) {
jQuery(document).trigger('wpsolr_on_ajax_suggestions_hide', {
me: me,
suggestion: suggestion
});
},
onSearchStart: function () {
me.addClass('wpsolr_loading_sugg');
},
onSearchComplete: function () {
me.removeClass('wpsolr_loading_sugg');
jQuery(document).trigger('wpsolr_on_ajax_suggestions_success', {
me: this,
suggestion: suggestion
});
},
formatResult: function (suggestion, currentValue) {
return suggestion.value;
},
transformResult: function (response, originalQuery) {
return {"suggestions": [JSON.parse(response)[0].html]};
}
},
// Override default parameters with custom parameters
custom_options
)
);
});
});
}
if ((wp_localize_script_autocomplete.data.is_ajax) && (0 === $(document).find('.search-frm').length)) {
/**
*
* Search form is triggered on ajax
*/
$('form').on('submit', function (event) {
var me = $(this);
var current_results = $(wp_localize_script_autocomplete.data.css_ajax_container_results).first();
if (current_results.length && $(this).find(wp_localize_script_autocomplete.data.wpsolr_autocomplete_selector).length) {
// The submitted form is on a search page
event.preventDefault();
var keywords = me.find(wp_localize_script_autocomplete.data.wpsolr_autocomplete_selector).first().attr("value");
// Ajax call on the current selection
var parameter = {};
if ('' !== wp_localize_script_autocomplete.data.redirect_search_home) {
var redirect_search_home = wp_localize_script_autocomplete.data.redirect_search_home;
if (!keywords && !wp_localize_script_autocomplete.data.redirect_search_home.endsWith('/')) {
redirect_search_home = redirect_search_home.substring(0, 1 + redirect_search_home.indexOf('/'));
}
parameter['url'] = '/' + redirect_search_home + encodeURIComponent(keywords);
// Use Ajax if current page is the redirect search home page
wp_localize_script_autocomplete.data.is_ajax = window.location.pathname.startsWith('/' + redirect_search_home.split('/')[0]);
} else {
parameter[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_S] = keywords;
}
call_ajax_search_timer(parameter, true, true);
}
});
/**
*
* Search sort is triggered on ajax
*/
// Unbind them's sort event, before replacing it.
$(document).off('change', wp_localize_script_autocomplete.data.css_ajax_container_page_sort + ' select');
$(wp_localize_script_autocomplete.data.css_ajax_container_page_sort).closest('form').on('submit', function () {
return false;
});
$(document).on('change', wp_localize_script_autocomplete.data.css_ajax_container_page_sort + ' select', function (event) {
var me = $(this);
// The submitted form is on a search page
event.preventDefault();
// Ajax call on the current selection
var parameter = {};
parameter[me.prop("name")] = me.prop("value");
call_ajax_search_timer(parameter, true, true);
});
/**
*
* Search navigation is triggered on ajax
*/
$(document).on('click', wp_localize_script_autocomplete.data.css_ajax_container_pagination_page, function (event) {
event.preventDefault();
var me = $(this);
// Ajax call on the current selection
var parameter = {};
parameter['url'] = me.attr("href");
call_ajax_search_timer(parameter, true, true);
});
}
/**
* Select/unselect a facet
*/
window.wpsolr_facet_change = function ($items, event) {
if (event) {
event.preventDefault();
}
// Reset pagination
$('#paginate').val('');
var state = [];
var $this;
$items.each(function (index) {
$this = $(this);
var facet_data = $this.data('wpsolr-facet-data');
if ($this.attr('id') === 'wpsolr_remove_facets') {
// Unselect all facets
$('.select_opt').removeClass('checked');
$this.addClass('checked');
} else {
// Select/Unselect the element
is_already_selected = $this.hasClass('checked') && ('facet_type_min_max' !== facet_data.type);
var facet_name = facet_data.id;
if (is_already_selected) {
// Unselect current selection
$this.removeClass('checked');
$this.addClass('unchecked');
$this.next("ul").children().find("[id^=" + facet_name + "]").removeClass('checked');
if ($this.hasClass('wpsolr_facet_option')) {
if ($this.parent().prop("multiple")) {
// Unselelect children too (next with sublevel)
var current_level = $this.data('wpsolr-facet-data').level;
$this.nextAll().each(function () {
//alert(current_level + ' : ' + $(this).data('wpsolr-facet-data').level);
if (current_level < $(this).data('wpsolr-facet-data').level) {
//alert($(this).attr('id') + ' : ' + $(this).attr('class'));
$(this).removeClass('checked');
} else {
return false; // Stop asap to prevent adding another sublevel
}
});
}
}
} else {
// Unselect other radioboxes
$this.closest("ul.wpsolr_facet_radiobox").children().find("[id^=" + facet_name + "]").removeClass('checked');
if ($this.hasClass('wpsolr_facet_option')) {
if (!$this.parent().prop("multiple")) {
// Unselect other options first
$this.parent().children().removeClass('checked');
} else {
// Select parents too (previous with sublevel)
var current_selected_level = $this.data('wpsolr-facet-data').level;
$this.prevAll().each(function () {
if (current_selected_level > $(this).data('wpsolr-facet-data').level) {
$(this).addClass('checked');
// Recursive on parents
current_selected_level = $(this).data('wpsolr-facet-data').level;
}
});
}
$this.addClass('checked');
} else {
// Select current selection (ul/li)
$this.parents("li").children(".select_opt").addClass('checked');
}
}
// Get facets state
state = get_ui_facets_state($this);
}
})
//alert(JSON.stringify(state));
// Ajax call on the current selection
var parameter = {};
var permalink;
if (undefined !== $this) {
permalink = $this.find('a.wpsolr_permalink').first().attr('href') || $this.data('wpsolr-facet-data').permalink_href;
}
if (undefined === permalink) {
parameter[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_FQ] = state;
} else {
if ((null !== event) && (undefined !== event)) {
event.preventDefault(); // Prevent permalink redirection
}
parameter['url'] = permalink;
}
//parameter['element'] = $items;
call_ajax_search_timer(parameter, true, false);
}
/**
* A simple facet is selected/unselected
*/
$(document).on('click', 'div.select_opt', function (event) {
if ('facet_type_field' === $(this).data('wpsolr-facet-data').type) {
wpsolr_facet_change($(this), event);
}
});
function wpsolr_select_value(current) {
var selected_values = current.val();
//console.log(selected_values);
//console.log(current.prop('multiple'));
if (current.prop('multiple')) {
// It is a multi-select. Delete first to replace values.
current.children().removeClass('checked');
}
wpsolr_facet_change(current.find('option:selected'), event);
}
/**
* A non-multiselect select facet is selected/unselected
*/
$(document).on('change', '.wpsolr_facet_select select', function (event) {
wpsolr_select_value($(this));
});
/**
* A non-multiselect select facet is clicked
*/
$(document).on('clickx', '.wpsolr_facet_select .wpsolr-select-multiple option', function (event) {
//console.log('test');
wpsolr_select_value($(this).parent('select'));
});
/**
* Sort is selected
*/
$(document).on('change', '.select_field', function () {
// Reset pagination
$('#paginate').val('');
// Retrieve current selection
sort_value = $(this).val();
// Ajax call on the current selection
var parameter = {};
parameter[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_SORT] = sort_value;
call_ajax_search_timer(parameter, true, true);
});
/**
* Pagination is selected
*/
$(document).on('click', '.paginate', function () {
// Retrieve current selection
page_number = $(this).attr('id');
// Store the current selection
$('#paginate').val(page_number);
// Ajax call on the current selection
var parameter = {};
parameter[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_PAGE] = page_number;
call_ajax_search_timer(parameter, true, false);
});
/**
* Add geolocation user agreement to selectors
*/
$(wp_localize_script_autocomplete.data.WPSOLR_FILTER_GEOLOCATION_SEARCH_BOX_JQUERY_SELECTOR).each(function (index) {
$(this).closest('form').append(wp_localize_script_autocomplete.data.WPSOLR_FILTER_ADD_GEO_USER_AGREEMENT_CHECKBOX_TO_AJAX_SEARCH_FORM);
});
/**
* Manage geolocation
*/
$('form').on('submit', function (event) {
//event.preventDefault();
var me = $(this);
if ($(this).parent().find(wp_localize_script_autocomplete.data.WPSOLR_FILTER_GEOLOCATION_SEARCH_BOX_JQUERY_SELECTOR).length) {
// The submitted form contains an element linked to the geolocation by a jQuery selector
var nb_user_agreement_checkboxes = $(this).find(wp_localize_script_autocomplete.data.WPSOLR_FILTER_GEOLOCATION_USER_AGREEMENT_JQUERY_SELECTOR).length;
var user_agreement_first_checkbox_value = $(this).find(wp_localize_script_autocomplete.data.WPSOLR_FILTER_GEOLOCATION_USER_AGREEMENT_JQUERY_SELECTOR).filter(':checked').first().val();
/**
* We want to force the checkbox value to 'n' when unchecked (normally, it's value disappears from the form).
* Else, no way to have a 3-state url value: absent/checked/unchecked. The url absent state can be then translated to checked or unchecked.
*/
var current_checkbox = $(this).find(wp_localize_script_autocomplete.data.WPSOLR_FILTER_GEOLOCATION_USER_AGREEMENT_JQUERY_SELECTOR).first();
if (!current_checkbox.prop('checked')) {
me.append($("").attr("type", "hidden").attr("name", current_checkbox.prop("name")).val(wp_localize_script_autocomplete.data.PARAMETER_VALUE_NO));
} else {
current_checkbox.val(wp_localize_script_autocomplete.data.PARAMETER_VALUE_YES);
}
//console.log('wpsolr geolocation selectors: ' + wp_localize_script_autocomplete.data.WPSOLR_FILTER_GEOLOCATION_SEARCH_BOX_JQUERY_SELECTOR);
//console.log('wpsolr geolocation user agreement selectors: ' + wp_localize_script_autocomplete.data.WPSOLR_FILTER_GEOLOCATION_USER_AGREEMENT_JQUERY_SELECTOR);
//console.log('wpsolr nb of geolocation user agreement checkboxes: ' + nb_user_agreement_checkboxes);
//console.log('wpsolr first geolocation user agreement checkbox value: ' + user_agreement_first_checkbox_value);
if ((0 === nb_user_agreement_checkboxes) || (undefined !== user_agreement_first_checkbox_value)) {
// The form does not contain a field requiring to not use geolocation (a checkbox unchecked)
if (navigator.geolocation) {
// Stop the submit happening while the geo code executes asynchronously
event.preventDefault();
// Add a css class to the submit buttons while collecting the location
me.addClass("wpsolr_geo_loading");
// Remove the class automatically, to prevent it staying forever if the visitor denies geolocation.
var wpsolr_geo_loading_timeout = window.setTimeout(
function () {
me.removeClass("wpsolr_geo_loading");
}
,
10000
);
navigator.geolocation.getCurrentPosition(
function (position) {
// Stop wpsolr_geo_loading_timeout
window.clearTimeout(wpsolr_geo_loading_timeout);
// Add a css class to the submit buttons while collecting the location
me.addClass("wpsolr_geo_loading");
// Add coordinates to the form
me.append($("").attr("type", "hidden").attr("name", wp_localize_script_autocomplete.data.SEARCH_PARAMETER_LATITUDE).val(position.coords.latitude));
me.append($("").attr("type", "hidden").attr("name", wp_localize_script_autocomplete.data.SEARCH_PARAMETER_LONGITUDE).val(position.coords.longitude));
// Finally, submit
me.unbind('submit').submit();
},
function (error) {
console.log('wpsolr: geolocation error: ' + error.code);
// Stop wpsolr_geo_loading_timeout
window.clearTimeout(wpsolr_geo_loading_timeout);
// Add a css class to the submit buttons while collecting the location
me.addClass("wpsolr_geo_loading");
// Finally, submit
me.unbind('submit').submit();
}
);
} else {
console.log('wpsolr: geolocation not supported by browser.');
}
}
}
});
/**
* Toolset Views triggered event. Refresh the facets.
*/
$(document).on('js_event_wpv_parametric_search_form_updated', function (event, data) {
// Get Toolset View form search box value (not in data, unfortunatly)
var keywords = $('[name="' + data.view_changed_form[0].name + '"]').find('[name="wpv_post_search"]').val();
var context = $(data.view_changed_form.context);
var is_require_facets_refresh =
context.hasClass('wpv-submit-trigger') ||
context.hasClass('wpv-reset-trigger') ||
context.hasClass('js-wpv-filter-trigger-delayed form-control');
/*
console.log('search box:' + keywords);
console.log('url: ' + keywords_in_url);
console.log(context);
console.log('submit? : ' + context.hasClass('wpv-submit-trigger'));
console.log('Reset? : ' + context.hasClass('wpv-reset-trigger'));
*/
if (is_require_facets_refresh) {
// Ajax call on the current selection
var parameter = {};
parameter[wp_localize_script_autocomplete.data.SEARCH_PARAMETER_S] = keywords;
parameter['wpv_post_search'] = keywords;
// Mark the beginning of loading. Removed when facets are refreshed.
$('.res_facets').append('');
call_ajax_search(parameter, true, false);
}
});
});